#include <vector>
#include <algorithm>
#include <fstream>
#include <iostream>

using namespace std;

struct Milking {
  int begin;
  int end;
};

// 为 Milking 自定义一个 小于比较操作符。
// 我们自己告诉 C++，Milking 的小于比较规则
// l < r
bool operator < (const Milking &l, const Milking &r) {
  return l.begin < r.begin;
}

int main(int argc, char const *argv[])
{
  /* code */
  // 处理输入
  ifstream ifs("milk2.in");
  int n = 0; 
  ifs >> n;

  vector<Milking> records;

  for (int i = 0; i < n; ++i) {
    int b = 0, e = 0;
    ifs >> b >> e;
    Milking m {b, e};
    records.push_back(m);
  }

  sort(records.begin(), records.end());

  /*
  TODO:
  至此，所有农夫挤奶的起始时间，就从大到小排序了。接下来，我们遍历 records，
  对于每一个遍历到的当前的挤奶记录 curr，我们不断向后遍历剩余的挤奶记录。
  */

  Milking curr = records.front();

  for (int i = 1; i < records.size(); ++i) {
    /*
    TODO:
    1. 如果 curr 和 records[i] 是右侧交叉的情况：
    
    这说明 records[i] 的结束时间会导致有牛在喂奶的时间延长，此时，我们应该记录下新的结束时间点。

    2. 如果 curr 和 records[i] 是右侧超出的情况，这可能会导致两种结果：

    - 会出现一段新的没有牛喂奶的时间，我们要计算出这个时间，并和历史值做比较
    - 计算这个 records[i] 之前能获得的最大有牛挤奶的时间，并把这个时间和 records[i].end - records[i].begin
      比较，取较大的一个值作为最大的有牛挤奶的时间。并把 records[i] 设置为 curr。
    */  
  }

  return 0;
}
